package org.openmore.opc.service;

import org.openmore.opc.dto.api.PermissionDto;
import org.openmore.opc.dto.api.RolePermissionDto;
import org.openmore.opc.entity.Permission;
import org.openmore.opc.entity.Role;

import java.util.List;

public interface PermissionService {
    /**
    * 根据id获得Entitu对象
    * @param id
    * @return
    */
    Permission getEntityById(String id);

    /**
     * 根据id获得dto对象
     * @param id
     * @return
     */
    PermissionDto getDtoById(String id);

    /**
     * 分页获得所有记录
     * @return
     */
    List<PermissionDto> selectAll(String type, String name);

     /**
      * 插入指定数据
      * @return
     */
    PermissionDto insert(PermissionDto permission);

    /**
     * 根据id删除数据
     */
    void deleteById(String id);

    /**
     * 更新指定的对象数据
     */
    void update(PermissionDto permission);

    /**
     * 根据角色列表获得对应的权限列表
     * ############################################################################
     * # 仅在配置shiro权限时使用，其它时候，使用getPermissionsByStaffId，直接获得用户权限
     * ############################################################################
     * @param roleList
     * @return
     */
    List<Permission> getPermissionsByRoles(List<Role> roleList);

    /**
     * 根据权限id列表，返回对应的顺序菜单列表
     * @return
     */
    List<PermissionDto> findMenuByPermissions(List<Permission> permissions);


    /**
     * 根据员工id获得所有权限列表
     * @param staffId
     * @return
     */
    List<Permission> getPermissionsByStaffId(String staffId);


    /**
     * 获得权限树
     *
     * @return
     */
    List<PermissionDto> getPermissionTree();


    /**
     * 根据角色id获得该角色拥有的权限
     * @return
     */
    List<RolePermissionDto> getGrantedPermissionByStaffId(String roleId);
}
